#!/usr/bin/perl

#Программа рисует вертикальные и горизонтальные корабли, длиной не больше 4
#Корабли не должны пересекаться, один из них не отрисовывается программой
#Формат параметров - 4х значное число,где первые 2 цифры координаты начала и 2 последние конца корабля
use 5.010;
use warnings;
my @field;
sub FieldArray()
{
  for($i=0; $i<10; $i++) {
    for($j=0; $j<10; $j++) {
      $field[$i*10 + $j]=0;
    }
  }
}
sub DrawField()
{
  print "   0 1 2 3 4 5 6 7 8 9 \n";
  print "  --------------------\n";
    for($i=0; $i<10; $i++)
    {
      print "$i|";
      for($j=0; $j<10; $j++) 
      {
        if($field[$i*10 + $j]==0)
        {
          print " *";
        }
        else
        {
          print " #";
        }
      }  
      print "|\n";
    }
  print "  --------------------\n";
}

FieldArray;
my $flag=0;
foreach my $coord (@ARGV)
{  
  my $x1=substr $coord, 0, 1;
  my $x2 =substr $coord, 2, 1;
  my $y1=substr $coord, 1, 1;
  my $y2=substr $coord, 3, 1;
  #проверка длины и формы корабля
  my $test1=$x2-$x1; 
  my $test2=$y2-$y1;
  my $test3= length $coord;#правильность вводимых данных
  if ($test3==4 && $test1<=4 && $test2 <= 4 && ($x1 == $x2 || $y1 == $y2))
  {
    for($i=$x1;$i <= $x2;$i++)
    {
  		for($j=$y1;$j <= $y2;$j++)
      {
        if ($field[$i*10 + $j]==1)
        {
          print "Корабль \"$coord\" пересекается с уже существующим, он нарисован не будет\n";
          $flag=1;
        }
      }
    }
    if ($flag==1) #не добавляем корабль
      {  
        $flag=0;
        next;
      }
  	for($i=$x1;$i <= $x2;$i++)
    {
			for($j=$y1;$j <= $y2;$j++)
      {
          $field[$i*10 + $j]=1;
      }
    }
  }
  else
  {
    print "Только вертикальные и горизонтальные корабли, длиной не больше 4\n";
  }
}
DrawField;
